/*
 * MIT License
 *
 * Copyright (C) 2021 Huawei Device Co., Ltd.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANT KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

#ifndef HARMONY_CLIP_PATH_VIEW_SRC_MAIN_CPP_CLIPPATHVIEWNAPIBINDER_H
#define HARMONY_CLIP_PATH_VIEW_SRC_MAIN_CPP_CLIPPATHVIEWNAPIBINDER_H
#include "RNOHCorePackage/ComponentBinders/ViewComponentNapiBinder.h"
#include "Props.h"

namespace rnoh {

    class ClipPathViewNapiBinder : public ViewComponentNapiBinder {
    public:
        napi_value createProps(napi_env env, facebook::react::ShadowView const shadowView) override {
            napi_value napiViewProps = ViewComponentNapiBinder::createProps(env, shadowView);
            auto propsObjBuilder = ArkJS(env).getObjectBuilder(napiViewProps);

            if (auto props = std::dynamic_pointer_cast<const facebook::react::RNCClipPathViewProps>(shadowView.props)) {
                propsObjBuilder.addProperty("d", props->d);
                propsObjBuilder.addProperty("opacity", props->opacity);
                propsObjBuilder.addProperty("mask", props->mask);
                propsObjBuilder.addProperty("oldMask", props->oldMask);
                propsObjBuilder.addProperty("fillColor", props->fillColor);
                propsObjBuilder.addProperty("fillOpacity", props->fillOpacity);
                propsObjBuilder.addProperty("fillRule", props->fillRule);
                propsObjBuilder.addProperty("strokeColor", props->strokeColor);
                propsObjBuilder.addProperty("strokeOpacity", props->strokeOpacity);
                propsObjBuilder.addProperty("strokeWidth", props->strokeWidth);
                propsObjBuilder.addProperty("strokeCap", props->strokeCap);
                propsObjBuilder.addProperty("strokeJoin", props->strokeJoin);
                propsObjBuilder.addProperty("strokeMiter", props->strokeMiter);
                propsObjBuilder.addProperty("strokeStart", props->strokeStart);
                propsObjBuilder.addProperty("strokeEnd", props->strokeEnd);
                propsObjBuilder.addProperty("shadowColor", props->shadowColor);
                propsObjBuilder.addProperty("shadowOpacity", props->shadowOpacity);
                propsObjBuilder.addProperty("shadowRadius", props->shadowRadius);
                propsObjBuilder.addProperty("shadowOffsetX", props->shadowOffsetX);
                propsObjBuilder.addProperty("shadowOffsetY", props->shadowOffsetY);
                propsObjBuilder.addProperty("shadowOffsetIsPercent", props->shadowOffsetIsPercent);
                propsObjBuilder.addProperty("bgColor", props->bgColor);
                propsObjBuilder.addProperty("scale", props->scale);
                propsObjBuilder.addProperty("scaleX", props->scaleX);
                propsObjBuilder.addProperty("scaleY", props->scaleY);
                propsObjBuilder.addProperty("scaleOrigin", props->scaleOrigin);
                propsObjBuilder.addProperty("scaleOriginX", props->scaleOriginX);
                propsObjBuilder.addProperty("scaleOriginY", props->scaleOriginY);
                propsObjBuilder.addProperty("scaleIsPercent", props->scaleIsPercent);
                propsObjBuilder.addProperty("rotation", props->rotation);
                propsObjBuilder.addProperty("rotationOx", props->rotationOx);
                propsObjBuilder.addProperty("rotationOy", props->rotationOy);
                propsObjBuilder.addProperty("rotationIsPercent", props->rotationIsPercent);
                propsObjBuilder.addProperty("translationX", props->translationX);
                propsObjBuilder.addProperty("translationY", props->translationY);
                propsObjBuilder.addProperty("translationIsPercent", props->translationIsPercent);

                return propsObjBuilder.build();
            }
            return napiViewProps;
        };
    };

} // namespace rnoh
#endif
